package com.example.demo.leetcode.top100;

import java.util.Stack;

/**
 * ******************************************************
 *
 * @author liugh9
 * @version 1.0
 * @classname _72每日温度
 * @description
 * @date 2023/06/25 10:15
 * <p>
 * ******************************************************
 */
public class _72每日温度 {

    public int[] dailyTemperatures(int[] temperatures) {
        // 单调栈 里面的数 非递增排序
        Stack<Integer> stack = new Stack<>();
        int[] res = new int[temperatures.length];

        for (int i = temperatures.length - 1; i >= 0; i--) {
            // 当前元素比栈顶元素大 出栈 重新调整栈直至满足要求
            while (!stack.isEmpty() && temperatures[stack.peek()] <= temperatures[i]) {
                stack.pop();
            }
            // 栈为空 即后面没有比当前天温度高的
            // 不为空 栈顶元素对应的下标减去当前下标即为经过几天后温度比当前天温度高
            res[i] = stack.isEmpty() ? 0 : (stack.peek() - i);
            // 当前元素进栈
            stack.push(i);
        }

        return res;
    }
}
